package com.dzienniczekwedkarza.database.dbUtils.ORMLite;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Logger;

import com.dzienniczekwedkarza.database.models.ORMLite.AtlasRyb;
import com.j256.ormlite.android.apptools.OrmLiteConfigUtil;

/**
 * @author Rafał Wysogląd
 * @link http://code.google.com/p/bazy-danych-2-projekt/wiki/LitePrzygotowanieAndroida
 */

/*
   Na podstawie żródła w linku: http://code.google.com/p/bazy-danych-2-projekt/wiki/LitePrzygotowanieAndroida
    
   Klasa DatabaseConfigUtil
   
   W Pliku ormlite_config.txt trzymana będzie konfiguracja bazy danych. 
   Dzięki temu tworzenie obiektów DAO przez DatabaseHelper będzie szybsze.
   Jednak na razie żadna klasa nie zapisuje do tego pliku. 
   Aby to zmienić tworzymy klasę dziedziczącą po com.j256.ormlite.android.apptools.OrmLiteConfigUtil. 
   Będzie ona zawierała metodę main w której wywoływana będzie metoda writeConfigFile zapisująca konfigurację do pliku: 
   
   
   Po każdej zmianie struktury bazy powinniśmy wykonać metodę main tej klasy (Run as java application). 
   Przed pierwszym uruchomieniem należy zmienić domyślną konfigurację uruchamiania aplikacji.
   W tym celu w Package Explorer klikamy prawym przyciskiem myszy na klasie DatabaseConfigUtil 
   i wybieramy Run As->Run Configurations.... Wybieramy zakładkę Classpath, a w niej zaznaczamy 
   Android<wersja> znajdujące się w Bootstrap Entries i klikamy Remove. 
   
   Następnie zaznaczamy Bootstrap Entries i klikamy na Advanced.... Wybieramy Add Library, następnie JRE System Library,
   a potem zaznaczamy Workspace default JRE i klikamy Finish. Zapisujemy zmiany (klikając na Apply). 
   Teraz możemy już uruchomić aplikację klikając na Run. 
   Jeśli nie mamy żadnych klas, plik ormlite_config.txt powinien wyglądać następująco:

   #
   # generated on 2013/10/02 02:38:27
   #

   a w konsoli(Console) przykładowy komunikat : 
   Writing configurations to C:\Dzienniczek-Wedkarza\sources\.\res\raw\ormlite_config.txt
   Done.
   
   W przeciwnym wypadku Jeżeli wyskoczy komunikat, że nie może znależć tej klasy DatabaseConfigUtil, należy spróbować Projekt->clean
   lub Run as -> maven clean i Run as -> maven install i jeszcze raz spróbować run As -> Java aplication
   
   
   Aby poprawnie wygenerować plik ormlite_config.txt, należy do metody main w klasie DatabaseConfigUtil dodać klasę Atlasryb do listy odwzorowywanych klas.

   Po zmodyfikowaniu klasy należy uruchomić DatabaseConfigUtil jako aplikację javy (Run As->Java Application), następnie zmienić wersję DATABASE_VERSION 
   w DatabaseHelper i w końcu uruchomić całą aplikację (Run As->Android Application). 
   
 
 */


public class DatabaseConfigUtil  extends OrmLiteConfigUtil {
	
	 
	private static final Logger logger = Logger.getLogger(DatabaseConfigUtil.class.getName());  // The logger. We cannot use Android's Log class since this is a standalone command line app.
	public static final String CONFIG_FILE_NAME = "ormlite_config.txt"; // The name of the generated ORMLite config file. (Nazwa generowanego pliku konfiguracyjnego ORMLite) 
		
	//An array of Class-es which will be stored in the local DB. (Tablica klas, które sa przechowywane w lokalnej bazie danych)
	public static final Class<?>[] CLASSES = new Class[]{
         	AtlasRyb.class,
    };
	
	
	public static void main(String[] args) throws SQLException, IOException {
		
		File rawFolder = new File("res/raw");
		
		 // Check is `res/raw` exists ... ( sprawdzamy czy folder 'res/raw' istnieje)
        if(!rawFolder.exists()) {
        	
        	// ... if not create it.  ( jezeli nie, to tworzymy ) 
            boolean rawCreated = rawFolder.mkdirs();
            
            if(!rawCreated) {
                logger.warning("Nie można stworzyć folderu 'raw' w folderze 'res/'" +  " w klasie DatabaseConfigUtil: więc nie utworzono pliku konfiguracyjnego lokalnej bazy danych!");
                System.exit(1);
            }
            else
            {
                logger.info("Stworzono folder: `res/raw/`");
            }
        	
        }
			
		
       writeConfigFile(CONFIG_FILE_NAME, CLASSES);
 	 
  }
}





